//
//  HMStatusPictureView.swift
//  Weibo12
//
//  Created by HM on 16/1/2.
//  Copyright © 2016年 itheima. All rights reserved.
//  微博的配图视图

import UIKit

// 配图视图里面最大的列数
let HMStatusPictureMaxCol = 3

// 可重用 id
private let HMStatusPictureCellId = "HMStatusPictureCellId"

// 每一个条目之前的间距
private let itemMargin: CGFloat = 5
// 每一个条目的宽度以及高度
private let itemWH = CGFloat(Int((SCREENW - 2 * HMStatusCellMargin - 2 * itemMargin) / CGFloat(HMStatusPictureMaxCol)))

class HMStatusPictureView: UICollectionView, UICollectionViewDataSource {
    
    // 定义属性，供外界设置数据
    var picUrls: [HMStatusPictureInfo]? {
        didSet{
            // 取出数量
            let count = picUrls?.count ?? 0
            // 显示有多少张图片
            countLabel.text = "\(count)"
            
            // 根据有多少张图片去更新大小约束
            self.snp_updateConstraints { (make) -> Void in
                make.size.equalTo(calcViewSize(count))
            }
            // 当数据设置完毕之后刷新数据
            reloadData()
        }
    }

    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        super.init(frame: frame, collectionViewLayout: UICollectionViewFlowLayout())
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func setupUI(){
        // 设置数据源为自己
        dataSource = self
        // 注册cell
        registerClass(HMStatusPictureViewCell.self, forCellWithReuseIdentifier: HMStatusPictureCellId)
        
        print(itemWH)
        
        // 比如现在 picture View 的宽度是 205.3333333333233
        // 100
        
        
        // 设置每一个 cell 的大小
        let layout = self.collectionViewLayout as! UICollectionViewFlowLayout
        layout.itemSize = CGSize(width: itemWH, height: itemWH)
        // 设置间距
        // 列间距
        layout.minimumInteritemSpacing = itemMargin
        // 设置行间距
        layout.minimumLineSpacing = itemMargin
        
        addSubview(countLabel)
        
        countLabel.snp_makeConstraints { (make) -> Void in
            make.center.equalTo(self.snp_center)
        }
    }
    
    
    /// 根据图片的张数，计算当前配图视图的大小
    ///
    /// - parameter count: <#count description#>
    ///
    /// - returns: <#return value description#>
    private func calcViewSize(count: Int) -> CGSize {
        // 6 --> 2 行 3列
        // 9 --> 3 行 3列
        

        
        // 计算列数
        var col = count > HMStatusPictureMaxCol ? HMStatusPictureMaxCol : count
        // 如果是4张图片，显示两列
        if count == 4 {
            col = 2
        }
//        var col = count == 4 ? 2 :（count > HMStatusPictureMaxCol ? HMStatusPictureMaxCol : count）
        
        // 6 --> 2 行
        // 5 --> 2 行
        // 3 --> 1 行
        // 计算行数
        let row = (count - 1) / HMStatusPictureMaxCol + 1
        
        
        // 计算宽度以及高度
        let width = CGFloat(col) * itemWH + CGFloat(col - 1) * itemMargin
        let height = CGFloat(row) * itemWH + CGFloat(row - 1) * itemMargin
        
        // 返回结果
        return CGSize(width: width, height: height)
    }
    // MARK: - 懒加载控件
    
    // 作测试用，显示当前配图控件里面要显示多少张图片
    private lazy var countLabel: UILabel = {
        let label = UILabel(textColor: UIColor.blackColor(), fontSize: 35)
        return label
    }()

}

// MARK: - 数据源方法
extension HMStatusPictureView {
    
    // 返回有多少个 item
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return picUrls?.count ?? 0
    }
    
    // 返回每一个 item 对应的 cell
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(HMStatusPictureCellId, forIndexPath: indexPath) as! HMStatusPictureViewCell
        // 设置数据
        cell.picUrl = picUrls![indexPath.item]
        return cell
    }
}


// 自定义 cell
class HMStatusPictureViewCell: UICollectionViewCell {
    
    // 定义外界设置的属性
    var picUrl: HMStatusPictureInfo? {
        didSet{
            if let urlString = picUrl?.thumbnail_pic {
                let url = NSURL(string: urlString)
                // 显示图片
                imageView.sd_setImageWithURL(url, placeholderImage: UIImage(named: "timeline_image_placeholder"))
            }
        }
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func setupUI(){
        // 添加控件
        contentView.addSubview(imageView)
        
        // 添加约束
        imageView.snp_makeConstraints { (make) -> Void in
            make.edges.equalTo(contentView)
        }
    }
    
    // MARK: - 懒加载控件
    private lazy var imageView: UIImageView = {
        let imageView = UIImageView(image: UIImage(named: "timeline_image_placeholder"))
        imageView.contentMode = .ScaleAspectFill
        // 截取掉超出部分
        imageView.clipsToBounds = true
        return imageView
    }()
}
